package FooBarBibliotheque;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Iterator;

/* @authors vasquezs, haffafa, baldinof */
public class Lecteur implements Serializable {

    private static final long serialVersionUID = 1L;
    private int numeroLecteur;
    private String nom;
    private String prenom;
    private int age;
    private String adresse;
    private String numeroTelephone;
    private HashSet<Emprunt> emprunts;

    public Lecteur(int numeroLecteur, String nom, String prenom, int age, String adresse, String numeroTelephone) {
        this();
        setNumeroLecteur(numeroLecteur);
        setNom(nom);
        setPrenom(prenom);
        setAge(age);
        setAdresse(adresse);
        setNumeroTelephone(numeroTelephone);
    }

    public Lecteur() {
        emprunts = new HashSet<Emprunt>();
    }

    public int getNumeroLecteur() {
        return numeroLecteur;
    }

    public void setNumeroLecteur(int numeroLecteur) {
        this.numeroLecteur = numeroLecteur;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getNumeroTelephone() {
        return numeroTelephone;
    }

    public void setNumeroTelephone(String numeroTelephone) {
        this.numeroTelephone = numeroTelephone;
    }

    public String infoLecteur() {
        return "Informations sur le lecteur : "
                + " \nnumeroLecteur : " + getNumeroLecteur()
                + " \nnom : " + getNom()
                + " \nprenom : " + getPrenom()
                + " \nage : " + getAge() + ""
                + " \nadresse : " + getAdresse()
                + " \nnumeroTelephone : " + getNumeroTelephone();
    }

    public boolean etatNonSature() {
        return emprunts.size() < 5;
    }

    public void emprunter(Exemplaire e) {
        Emprunt emprunt = new Emprunt(EntreSortie.lireDate("Entrez date emprunt:"));
        emprunt.lierEmpruntExemplaireLecteur(e, this);
        lierEmprumt(emprunt);
    }

    private void lierEmprumt(Emprunt emprunt) {
        emprunts.add(emprunt);
    }

    void delierEmpruntLecteur(Emprunt m) {
        delierEmprunt(m);
    }

    private void delierEmprunt(Emprunt m) {
        emprunts.remove(m);
    }

    public String infoLecteurSimple() {
        return "Informations sur le lecteur : "
                + " \nnumero lecteur : " + getNumeroLecteur()
                + " \nnom : " + getNom()
                + " \nprenom : " + getPrenom();
    }

    public String infoEmprunt() {
        String str = "";
        Emprunt m;
        Iterator<Emprunt> iter = emprunts.iterator();
        while (iter.hasNext()) {
            m = iter.next();
            str += m.infoExemplaire() + m + "\n";
        }
        return str;
    }

    public String mesEmpruntsRetard() {
        String str = "";
        for (Emprunt emprunt : emprunts) {
            if (emprunt.isEnRetard()) {
                str += emprunt.infoOuvrageExemplaire();
                //str += emprunt.infoEmprunt() + "\n";
                str += emprunt + "\n";
            }
        }
        return str;
    }
}
